/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sgs.mb;

import br.com.sgs.auxiliar.ProcessoAux;
import br.com.sgs.auxiliar.StatusAux;
import br.com.sgs.bundle.MessageBundleLoader;
import br.com.sgs.entity.Departamento;
import br.com.sgs.entity.Etapa;
import br.com.sgs.entity.Processo;
import br.com.sgs.entity.Status;
import br.com.sgs.fachada.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.component.selectonemenu.SelectOneMenu;

/**
 *
 * @author Eric
 */
@ManagedBean(name = "etapaNewMB")
@ViewScoped
public class EtapaNewMB implements Serializable {

    @ManagedProperty(value = "#{loginMB}")
    private LoginMB lmb;
    
    private String descricao;
    private int prazo = 0;
    
    //Select One Menu
    private SelectOneMenu cmbDepartamento;
    private List<SelectItem> lsdepartamento = new ArrayList<SelectItem>();
    private int iddepartamento;
    private Departamento departamentoselecionado;
    
    //Objetos de staatus
    private Status statusselecionado;
    private List<Status> lsstatus = new ArrayList<Status>();
    private String strstatusdescricao;
    private String statusbusca;
    
    //Objetos de staatus
    private Processo processoselecionado;
    private List<Processo> lsprocesso = new ArrayList<Processo>();
    private List<Processo> lsprocessoadd = new ArrayList<Processo>();
    private String strprocessodescricao;
    private String processobusca;


    /**
     * Creates a new instance of CampusNewMB
     */
    public EtapaNewMB() {
    }

    @PostConstruct
    public void init() {
        popularCombo();
    }

    public String salvar() {
        try {

            Etapa etapa = new Etapa();

            etapa.setDescricao(getDescricao());
            etapa.setDtcriacao(new Date());
            etapa.setDepartamento(getDepartamentoselecionado());
            etapa.setPrazo(prazo);
            etapa.setStatus(statusselecionado);

            for (Processo processo : lsprocessoadd) {
                etapa.getLsprocesso().add(processo);
            }
            

            IFachada ifach = new Fachada();
            ifach.inserir(etapa);

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, MessageBundleLoader.getMessage("msgSalvoSucesso"), ""));

            return "ETAPALIST";

        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, MessageBundleLoader.getMessage("erroNaoEncontrado"), ""));
            e.printStackTrace();
            return null;
        }
    }
    
    public void popularCombo(){
        try {
            
            lsdepartamento.clear();
            
            DepartamentoIFachada fach = new DepartamentoFachada();
            List<Departamento> ls = fach.findDepartamento();
            System.out.println(ls.size());
                    for (Departamento departamento : ls) {
                lsdepartamento.add(new SelectItem(departamento.getId(), departamento.getDescricao()));
            }
            
        } catch (Exception e) {
            System.err.println("Erro no metodod popularCombo");
            e.printStackTrace();
        }
    }
    
    public void selecionarDepartamento() {
        try {

            iddepartamento = Integer.parseInt(getCmbDepartamento().getValue().toString());

            if (iddepartamento != 0) {
                
                DepartamentoIFachada ifach = new DepartamentoFachada();                
                departamentoselecionado = (ifach.findDepartamentoById(iddepartamento));
              
            } else {
                departamentoselecionado = null;
            }

        } catch (Exception e) {
          System.err.println("Erro no selecionarDepartamento");  
        }
    }
    
    public void buscarStatus() {
        try {

            StatusIFachada ifach = new StatusFachada();
            lsstatus = ifach.findStatusByDescricao(statusbusca);

        } catch (Exception e) {
            System.err.println("Erro no método buscarStatus");
        }
    }

    public void removerStatus() {
        try {
     
            statusselecionado = null;
            strstatusdescricao = "";

        } catch (Exception e) {
            System.err.println("Erro no método removerModelo");
        }
    }

    public void selecionarStatus(Status s) {
        try {

            statusselecionado = s;
            strstatusdescricao = statusselecionado.getDescricao();

        } catch (Exception e) {
            System.err.println("Erro no selecionarStatus");
        }
    }
    
    public void buscarProcesso() {
        try {

        ProcessoIFachada ifach = new ProcessoFachada();
            lsprocesso = ifach.findProcessoByOrientacao(processobusca);

        } catch (Exception e) {
            System.err.println("Erro no método buscarProcesso");
        }
    }

    public void removerProcesso(Processo p) {
        try {
            lsprocessoadd.remove(p);
        } catch (Exception e) {
            System.err.println("Erro no método removerProcesso");
        }
    }

    public void selecionarProcesso(Processo p) {
        try {

            processoselecionado = p;
            strprocessodescricao = processoselecionado.getOrientacao();
            getLsprocessoadd().add(p);

        } catch (Exception e) {
            System.err.println("Erro no selecionarProcesso");
        }
    }

    public void limparCampos() {
        try {

            setDescricao("");
            strstatusdescricao = "";
            strprocessodescricao = "";
            iddepartamento = 0;

        } catch (Exception e) {
            System.err.println("Erro no limparCampos");
        }
    }

    public String voltar() {
        try {
            return "ETAPALIST";
        } catch (Exception e) {
            System.err.println("Erro no método voltar");
            return null;
        }
    }

    public String strStatusLabel(int st) {
        return MessageBundleLoader.getMessage(StatusAux.getStatusLabel(st));
    }
    
    public String strStatusProcessoLabel(int st) {
        return MessageBundleLoader.getMessage(ProcessoAux.getStatusLabel(st));
    }
    /**
     * @param lmb the lmb to set
     */
    public void setLmb(LoginMB lmb) {
        this.lmb = lmb;
    }

    /**
     * @return the lmb
     */
    public LoginMB getLmb() {
        return lmb;
    }

      /**
     * @return the departamentoselecionado
     */
    public Departamento getDepartamentoselecionado() {
        return departamentoselecionado;
    }

    /**
     * @param departamentoselecionado the departamentoselecionado to set
     */
    public void setDepartamentoselecionado(Departamento departamentoselecionado) {
        this.departamentoselecionado = departamentoselecionado;
    }

    /**
     * @return the statusselecionado
     */
    public Status getStatusselecionado() {
        return statusselecionado;
    }

    /**
     * @param statusselecionado the statusselecionado to set
     */
    public void setStatusselecionado(Status statusselecionado) {
        this.statusselecionado = statusselecionado;
    }

    /**
     * @return the lsstatus
     */
    public List<Status> getLsstatus() {
        return lsstatus;
    }

    /**
     * @param lsstatus the lsstatus to set
     */
    public void setLsstatus(List<Status> lsstatus) {
        this.lsstatus = lsstatus;
    }

    /**
     * @return the strstatusdescricao
     */
    public String getStrstatusdescricao() {
        return strstatusdescricao;
    }

    /**
     * @param strstatusdescricao the strstatusdescricao to set
     */
    public void setStrstatusdescricao(String strstatusdescricao) {
        this.strstatusdescricao = strstatusdescricao;
    }

    /**
     * @return the statusbusca
     */
    public String getStatusbusca() {
        return statusbusca;
    }

    /**
     * @param statusbusca the statusbusca to set
     */
    public void setStatusbusca(String statusbusca) {
        this.statusbusca = statusbusca;
    }

    /**
     * @return the processoselecionado
     */
    public Processo getProcessoselecionado() {
        return processoselecionado;
    }

    /**
     * @param processoselecionado the processoselecionado to set
     */
    public void setProcessoselecionado(Processo processoselecionado) {
        this.processoselecionado = processoselecionado;
    }

    /**
     * @return the lsprocesso
     */
    public List<Processo> getLsprocesso() {
        return lsprocesso;
    }

    /**
     * @param lsprocesso the lsprocesso to set
     */
    public void setLsprocesso(List<Processo> lsprocesso) {
        this.lsprocesso = lsprocesso;
    }

    /**
     * @return the strprocessodescricao
     */
    public String getStrprocessodescricao() {
        return strprocessodescricao;
    }

    /**
     * @param strprocessodescricao the strprocessodescricao to set
     */
    public void setStrprocessodescricao(String strprocessodescricao) {
        this.strprocessodescricao = strprocessodescricao;
    }

    /**
     * @return the processobusca
     */
    public String getProcessobusca() {
        return processobusca;
    }

    /**
     * @param processobusca the processobusca to set
     */
    public void setProcessobusca(String processobusca) {
        this.processobusca = processobusca;
    }

    /**
     * @return the cmbDepartamento
     */
    public SelectOneMenu getCmbDepartamento() {
        return cmbDepartamento;
    }

    /**
     * @param cmbDepartamento the cmbDepartamento to set
     */
    public void setCmbDepartamento(SelectOneMenu cmbDepartamento) {
        this.cmbDepartamento = cmbDepartamento;
    }

    /**
     * @return the lsdepartamento
     */
    public List<SelectItem> getLsdepartamento() {
        return lsdepartamento;
    }

    /**
     * @param lsdepartamento the lsdepartamento to set
     */
    public void setLsdepartamento(List<SelectItem> lsdepartamento) {
        this.lsdepartamento = lsdepartamento;
    }

    /**
     * @return the iddepartamento
     */
    public int getIddepartamento() {
        return iddepartamento;
    }

    /**
     * @param iddepartamento the iddepartamento to set
     */
    public void setIddepartamento(int iddepartamento) {
        this.iddepartamento = iddepartamento;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the lsprocessoadd
     */
    public List<Processo> getLsprocessoadd() {
        return lsprocessoadd;
    }

    /**
     * @param lsprocessoadd the lsprocessoadd to set
     */
    public void setLsprocessoadd(List<Processo> lsprocessoadd) {
        this.setLsprocessoadd(lsprocessoadd);
    }

    /**
     * @return the prazo
     */
    public int getPrazo() {
        return prazo;
    }

    /**
     * @param prazo the prazo to set
     */
    public void setPrazo(int prazo) {
        this.prazo = prazo;
    }

}
